Until recently, the vast majority of internet users accessed the World Wide Web via personal computers and workstations. Web designers could safely assume that the devices accessing their sites would have similar display capabilities, processor speed, and connection bandwidth. With careful design, it was possible to produce a single version of a web site that displayed satisfactorily in nearly all browsers. Unfortunately, this is no longer possible. The number and variety of so-called “network appliances” has exploded. Millions of internet users now log on via set top boxes, personal digital assistants (PDAs), and cellular telephones. Analysts have predicted that more people will soon access the web via network appliances than via personal computers. Now, web designers must take into account that browsers accessing their sites may display just a few words of text at a time, or they may display hundreds. Other browsers have no display at all and instead read the content to the user through a telephone. Processor speeds and bandwidth may vary by an order of magnitude. To make matters worse, different devices support different sets of file formats, often with no intersection at all.
Web content providers that need to support users on all these devices typically have to provide multiple versions of their sites. Amazon.com currently has three versions of its site: the conventional HTML version; an HDML version for display on first generation cell phone browsers; and a “web clipping” version for certain handheld computing devices. A fourth version will be for WML capable cell phones. Only content providers with the deepest pockets can afford to author so many different versions of their sites. Even for giants like Amazon.com, this approach is clearly not scalable as the variety of network appliances continues to increase.
As with many problems in computer science, this dilemma can be at least partially solved by adding a level of indirection. In internet terms, the level of indirection between a browser and a web server is called a proxy server. The model is simple. When a browser needs to retrieve a document from the web, it sends a request to the proxy server using the browser's native protocol. The proxy then retrieves the document from the server. If the document happens to be in a format that the browser is capable of displaying, the proxy will simply forward it along. This is where the process ends for most, if not all, traditional proxy servers.